1. Field of the Invention
The present invention relates to file systems that are accessible across computer networks. More particularly, the present invention relates to a method and an apparatus for reducing network traffic during remote file system operations by using a local path between a client and a storage device to bypass transfers through a server.
2. Related Art
As computer networks are increasingly used to link computer systems together, distributed operating systems have been developed to control interactions between computer systems across a computer network. Some distributed operating systems allow client computer systems to access resources on server computer systems. For example, a client computer system may be able to access a file on a server computer system across a network. Such distributed file systems make it easy to manipulate files located on a remote server. However, if such distributed file systems are not designed carefully, they can easily generate unnecessary communications across the network, which can degrade overall system performance.
Some distributed operating system have been designed to facilitate high availability. A highly available system provides redundancy so that when a primary node in the highly available system fails a backup secondary node is able to take its place. This allows the system to continue functioning without interruption. Highly available computer systems often provide multiple servers to access a storage device. Each of these servers has its own local data path to the storage device so that if one server fails another can take its place.
At first glance, there appears to be an advantage in using the multiple paths to the storage device to provide parallel access to the storage device, in order to increase overall computer system performance. However, allowing parallel accesses to the storage device can give rise to concurrency and locking problems which can greatly complicate the design of a distributed operating system. For these reasons, it is easier to centralize control over file system accesses within a single server.
However, routing communications through a single server can impede system performance. A major bottleneck is caused by communications between the server and a client across a network. Each block of data retrieved from a storage device must be divided into numerous smaller packets, which are transferred over a network between the client and the server. For example, a 64K block of data retrieved from a disk drive is typically divided into dozens of packets, which are individually sent across the computer network between the client and the server. This process can greatly degrade system performance because each of the packets can generate an interrupt on the server and an interrupt on the client. These interrupts consume a great deal of computational time because process state is saved and restored during each interrupt.
Note that such data transfers across the computer network are largely wasted in the case where the client computer system possesses its own local path to the storage device. What is needed is a method and an apparatus that reduces network traffic during remote file system operations by using a local path between a client and a storage device whenever possible to bypass transfers through a server.
One embodiment of the present invention provides a system that reduces network traffic during remote file system operations by using a local path between a client and a storage device to bypass transfers through a server. The system operates by receiving a request at the server to access a file located on the storage device; this request is received across a network from an application on a client. Next, the system determines if a local path exists between the client and the storage device containing the file. Note that a local path is independent from a first path between the server and the storage device. If the local path exists, the system sends a bypass request to the client. This bypass request commands the client to satisfy the request by transferring data between the client and the storage device through the local path.
In a variation on the above embodiment, the system additionally receives a completion indicator from the client. This completion indicator informs the server that the client successfully completed the request across the local path. In response to the completion indicator, the system updates data structures on the server to indicate that the request has been completed, and then forwards the completion indicator to the application on the client.
In a variation on the above embodiment, if the local path does not exist, the system completes the request along a normal path by transferring the data between the client and the server through the network, and between the server and the storage device through the first path. After doing so, the system updates data structures on the server to indicate that the request has been completed and sends a completion indicator to the application on the client.
In one embodiment of the present invention, the request can be a read request to read the data from the file or a write request to write the data to the file.
In one embodiment of the present invention, the bypass request to the client includes, a pointer to a buffer on the client, an identifier for the storage device, a block offset into the storage device, and a length of the request. In this embodiment, if the request is a read operation, the buffer on the client holds the data that is read from the storage device. If the request is a write operation, the buffer on the client holds the data to be written to the storage device.
One embodiment of the present invention provides a system that reduces network traffic during remote file system operations by using a local path between a client and a storage device to bypass transfers through a server. The system operates by receiving a request, at the client, to access a file located on the storage device. This request is received from an application running on the client. Next, the system sends the request to the server. The system waits for a request completion indicator to be received from the server. If a bypass request is received from the server, the system transfers data between the client and the storage device through a local path that is independent from a first path between the server and the storage device. Next, the system sends a local path completion indicator to the server. This local path completion indicator informs the server that the data has been transferred across the local path. If a request completion indicator is received from the server, the system forwards the request completion indicator to the application. This request completion indicator specifies that the request has been completed by transferring the data across either the first path or the local path.